package com.yezao.yzrouter.touterParser

import android.content.Context
import android.util.JsonReader
import android.util.JsonToken
import org.json.JSONArray
import org.json.JSONObject
import java.io.InputStream
import java.io.InputStreamReader

class JsonParser : IRouterParser {

   override fun parseFromRes(context:Context,jsonRes:Int):Map<String,String>{
        val rawIs = context.resources.openRawResource(jsonRes)
       return parseFromIO(context,rawIs)

    }



    override fun parseFromIO(context: Context, ins: InputStream): Map<String, String> {
        val jsonReader = JsonReader(InputStreamReader(ins))
        var obj: JSONObject?=null
        var root: JSONArray?=null

        // 初版格式比较固定  为 最外层一个数组  里面是 obj
        var name :String?=null
        var value:String?=null

        while (jsonReader.hasNext()){
            when(jsonReader.peek()){

                JsonToken.BEGIN_ARRAY -> {//一个数组的开始
                    println("[")
                    jsonReader.beginArray()
                    root = JSONArray()
                }

                JsonToken.BEGIN_OBJECT -> {//一个 object 的开始  执行 object 的流程
                    println("{")
                    jsonReader.beginObject()
                    obj = JSONObject()
                    root?.put(obj)
                }

                JsonToken.NAME -> {

                    val routeKey = jsonReader.nextName()// route
                    val routeValue = jsonReader.nextString()// xxxx/xxxx

                    val classKey = jsonReader.nextName()// value
                    val classValue = jsonReader.nextString()// xxxx.xxx
                    println("route $routeValue  value $classValue")
                    obj?.put(routeKey, routeValue)
                    obj?.put(classKey, classValue)
                    jsonReader.endObject()
                }

                JsonToken.END_OBJECT->{//一个 object 的结束
                    obj?.put(name,value)
                    println("}")
                    jsonReader.endObject()
                    obj =null
                }
                JsonToken.END_ARRAY -> {//一个数组的结束
                    println("]")
                    jsonReader.endArray()
                    break
                }
                else->{
                    println("==============")
                }
            }
        }
        jsonReader.close()
        val length = root?.length()?:0
        val map = HashMap<String,String>()
        for(i in 0 until length ){
            val jsonObject = root!!.getJSONObject(i)
            val routeUrl = jsonObject.getString("route")
            val className = jsonObject.getString("value")
            println("regist $routeUrl  $className"   )
            map.put(routeUrl,className)
        }
        return map
    }
}